ADSER page# 0001 next
2: COMMENT ⊗   VALID 00006 PAGES
3: C REC  PAGE   DESCRIPTION
4: C00001 00001
5: C00002 00002    BEGIN ADSER ↔ SUBTTL ADSER  A/D SERVICE ROUTINE - J. SAUTER, STANFORD, 25-FEB-68
6: C00003 00003    SYSTEM INITIALIZATION OF AD
7: C00005 00004    INPUT/OUTPUT UUOS
8: C00009 00005    HERE AT P1 CLOCK LEVEL. READY TO TELL P2 TO START.
9: C00011 00006    HUNG:   SETOM   ADERR
10: C00013 ENDMK
11: C⊗;
    ADSER page# 0002 next  prev
13: BEGIN ADSERSUBTTL ADSER  A/D SERVICE ROUTINE - J. SAUTER, STANFORD, 25-FEB-68
14: 
15: 
16: DEFINE CAT!(A,B),<A!B>
17: ADCHL←CAT(CH,\ADCHN)
18: 
19:         JRST    ADSET           ;INITIALIZE
20:         JRST    HUNG            ;HUNG: PRINT MESS & STOP JOB.
21: ADDSP: POPJ    P,              ;RELEASE
22:         POPJ    P,              ;CLOSE
23:         JSP     DAT,UERROR      ;BUFFERED OUTPUT
24:         JSP     DAT,UERROR      ;BUFFERED INPUT
25:         JRST    CPOPJ1          ;ENTER
26:         JRST    CPOPJ1          ;LOOKUP
27:         JRST    ADOUT           ;DUMP OUTPUT (REALLY DAC)
28:         JRST    ADIN            ;DUMP INPUT
29:         POPJ    P,              ;USETO
30:         POPJ    P,              ;USETI
31:         POPJ    P,              ;UGETF
32:         JRST    CPOPJ1          ;RENAME
33:         POPJ    P,              ;CLOSE INPUT
34:         POPJ    P,              ;UTPCLR
35:         POPJ    P,              ;MTAPE
36: 
    ADSER page# 0003 next  prev
38: ;SYSTEM INITIALIZATION OF AD
39: ADSET:  MOVEI   TAC,40+<ADCHN*2>        ;ASSUMED LOCATION OF PI CHANNEL WORDS
40:         SKIPN   TAC1,P2NUM              ;IS P2 ACTIVE?
41:         MOVE    TAC1,P1NUM              ;NO. 
42:         TLNE    TAC1,MAOFF              ;IS THIS P IN MA OFFSET?
43:         ADDI    TAC,100                 ;YES: ADD OFFSET.
44:         MOVEM   TAC,ADBLK               ;STORE LOCATION OF BLKI/O INSTRUCTION
45:         MOVE    TAC1,[JSR CAT(CH,\ADCHN)]       ;LOAD JSR FOR P1.
46:         SKIPE   P2NUM                           ;ARE WE USING P2?
47:         MOVE    TAC1,[JSR CAT(P2CH,\ADCHN)]     ;YES. LOAD JSR FOR P2
48:         MOVEM   TAC1,1(TAC)             ;STUFF IT INTO SECOND PI LOCATION
49:         MOVEM   TAC1,ADJSR              ;AND SAVE THE INSTRUCTION HERE
50:         ADDI    TAC,1
51:         MOVEM   TAC,ADJSRL              ;POINTER TO THE JSR TO INTERRUPT ROUTINE.
52:         SETZM   ADBKO
53:         SETZM   ADADV
54:         POPJ    P,
    ADSER page# 0004 next  prev
56: ;INPUT/OUTPUT UUOS
57: ADIN:   TLZA    IOS,IO                  ;CLEAR IO AND SKIP
58: ADOUT:  TLOA    IOS,IO                  ;SET IO AND SKIP
59:         SKIPA   TAC,[BLKI DCB,ADBKO]    ;FOR INPUT GET BLKI AND SKIP.
60:         MOVE    TAC,[BLKO DCB,ADBKO]    ;FOR OUTPUT, GET BLKO
61:         MOVEM   TAC,@ADBLK              ;STORE BLKI/O IN FIRST PI LOCATION
62:         HRRZ    TAC,UUO                 ;NOW ADDRESS CHECK
63:         CAMLE   TAC,USRREL
64:         JRST    ADRERR                  ;COMMAND WORD OUT OF BOUNDS.
65:         HRRZ    TAC,@UUO                ;GET FIRST IOWD.
66:         HLRO    DAT,@UUO
67:         SUB     TAC,DAT                 ;IS FINAL ADDRESS IN BOUNDS?
68:         CAMLE   TAC,USRREL
69:         JRST    ADRERR                  ;NO.
70:         MOVE    TAC,@UUO                ;YES.
71:         ADDI    TAC,(PROG)              ;FORM ABSOLUTE ADDRESS.
72:         MOVEM   TAC,ADBKX               ;STORE AS THE BLKO/I WORD
73:         MOVEI   TAC,@UUO                ;GENERATE ABSOLUTE ADDRESS
74:         MOVE    TAC1,1(TAC)             ;CONO TO 136.
75:         ANDCMI  TAC1,7                  ;REMOVE HIS PI NUMBER...
76:         IORI    TAC1,ADCHN              ;AND INSERT OURS
77:         HRRZM   TAC1,ADLOC3             ;PUT WHERE IT WILL BE HIT.
78:         HRRZ    TAC1,2(TAC)             ;CONO TO 424.
79:         HRRZM   TAC1,ADLOC4             ;REMEMBER IT LIKEWISE.
80:         MOVEI   TAC1,3(TAC)             ;CONI FROM 136.
81:         HRRZM   TAC1,ADLOC1             ;TO BE REMEMBERED
82:         MOVEI   TAC1,4(TAC)             ;CONI FROM A/D.
83:         HRRZM   TAC1,ADLOC2             ;LIKEWISE.
84:         PUSHJ   P,SETACT                ;MARK A/D IN USE AND STOP JOB.
85: AD2:    MOVEI   DDB,ADDDB
86:         MOVE    IOS,DEVIOS(DDB)
87:         LDB     TAC,PIOMOD              ;GET MODE.
88: ;       CAIN    TAC,SD                  ;MODE 15?       - FLUSHED 8/7/73
89: ;       POPJ    P,                      ;YES. RETURN.   - 
90:         TRNE    IOS,100                 ;CONTINUOUS MODE ?
91:         JRST    FOO                     ;YES.
92:         CAIN    TAC,D                   ;17?
93:         SKIPA   TAC,[CLOC3,,1]          ;YES. JUST WAIT ONE JIFFIE.
94: WT:     MOVE    TAC,[CLOC2,,3]          ;NO. GET CLOCK DESCRIPTOR.
95:         CONO    PI,PIOFF
96:         IDPB    TAC,CLOCK               ;ENTER CLOCK REQUEST
97:         CONO    PI,PION
98:         POPJ    P,                      ;RETURN TO UUOCON.
99: 
100: FOO:                                    ;CONTINUOUS MODE.
101:         MOVE    TAC,[JSR AD2INT]        ;MAKE INTERRUPT GO TO RIGHT PLACE.
102:         MOVEM   TAC,@ADJSRL
103:         HRRZM   TAC,ADADV               ;PREPARE TO GET JOB RESTARTED AT ONCE.
104:         SKIPL   ADBKO                   ;IS OUTPUT ALREADY GOING ON ?
105:         JRST    CLOC3                   ;NO. START IT. JOB WILL GO ON SINCE ADADV>0.
106:         MOVE    TAC,ADBKX               ;YES. SAVE PTR. FOR NEXT BUFFER.
107:         MOVEM   TAC,ADADV               ;ADADV ALSO SERVES AS A FLAG (SEE ADP1).
108:         POPJ    P,
    ADSER page# 0005 next  prev
110: ;HERE AT P1 CLOCK LEVEL. READY TO TELL P2 TO START.
111: CLOC2:  CONSO   TV,1B28                 ;IS BUTTON BEING PUSHED?
112:         JRST    WT                      ;NO. WAIT ANOTHER 3 TICKS
113: CLOC3:  SETZM   ADERR
114:         MOVE    TAC,ADBKX               ;GET BLKI/O WORD.
115:         MOVEM   TAC,ADBKO
116:         SETOM   ADACT                   ;TELL P2 TO START RUNNING
117:         SKIPE   P2NUM                   ;IF THERE'S NO P2, WE DO IT OURSELVES.
118:         POPJ    P,                      ;WAIT FOR P2 CLOCK LEVEL TO START IT.
119: ADP2:  MOVE    TAC,ADACT               ;HERE FROM P2 CLOCK LEVEL (OR P1 IF NO P2)
120:         JUMPE   TAC,CPOPJ               ;P2 DOESN'T SKIPN ON 2 PROCESSOR CELLS.
121:         SKIPE   ADERR                   ;ERRORS YET?
122:         JRST    AD6                     ;YES. GO BLAST IT
123:         SETZM   ADACT                   ;CLEAR CLOCK LEVEL REQUEST FLAG
124:         CONO    AD,4000                 ; STOP IT IF IT IS RUNNING
125:         MOVEI   TAC,20                  ; WAIT FOR IT
126:         SOJG    TAC,.
127:         CONO    ADC,0                   ; KILL NEW AD-DA IF RUNNING
128:         CONO    DAC,0                   ; OTHERWISE, WILL LOOP WITHOUT JSR P2CH1
129:         MOVSI   TAC,(<JRST>)
130:         HLLM    TAC,ADJMP               ; MAKE US JUMP TO APPROPRIATE ROUTINE
131:         CONO    DCB,@ADLOC3
132:         CONO    AD,@ADLOC4
133:         CONO    PI,ADON
134:         POPJ    P,
135: 
136: ;HERE TO STOP THE AD
137: AD6:    CONO    DCB,200000              ;BLAST THE 136.
138:         CONO    AD,4000                 ;AND THE A/D
139:         CONO    PI,ADOFF                ;TURN OFF A/D CHANNEL.
140:         MOVSI   TAC,(<JFCL>)
141:         HLLM    TAC,ADJMP               ; KILL AD INTERRUPT JUMP
142:         MOVE    TAC,ADJSR               ;MAKE INTERRUPTS GO TO NORMAL PLACE.
143:         MOVEM   TAC,@ADJSRL
144:         SETZM   ADBKO                   ;NO XFER IN PROGRESS.
145:         POPJ    P,                      ;AND RETURN.
    ADSER page# 0006 next  prev
147: HUNG:   SETOM   ADERR
148:         SETOM   ADACT
149:         SETZM   ADBKO
150:         JRST    AD5
151: 
152: ADINT:                                 ;BLKO OVERFLOWED
153:         JSR     @ADSAV                  ;SAVE ACCUMULATORS.
154:         CONI    DCB,@ADLOC1             ;CONI FROM 136.
155:         CONI    AD,@ADLOC2              ;AND FROM A/D.
156:         PUSHJ   P,AD6                   ;KILL A/D AND 136.
157:         HRRZM   P,ADADV
158:         SKIPE   P2NUM                   ;ARE WE ON P2?
159:         POPJ    P,                      ;YES. RETURN
160: 
161: ;IN CLKSER WE HAVE:     SKIPL   ADADV
162: ;                       PUSHJ   P,ADP1
163: ADP1:  SETZM   ADADV                   ;HERE AT P1 CLOCK LEVEL (OR IF NO P2)
164:         SKIPE   ADERR                   ;ERRORS?
165:         POPJ    P,                      ;YES.
166: AD5:    MOVEI   DDB,ADDDB
167:         MOVE    IOS,DEVIOS(DDB)
168:         TLZE    IOS,IOW
169:         PUSHJ   P,STTIOD
170:         SKIPL   ADBKO                   ;IS XFER STILL IN PROGRESS ?
171:         TRZ     IOS,IOACT               ;NO. LET JOB BE SWAPPED AND SHUFFLED.
172:         MOVEM   IOS,DEVIOS(DEVDAT)
173:         POPJ    P,
174: 
175:         BEND ADSER
 EOF: ADSER end-of-file. cnt=5